package stack;

import java.util.Stack;

/**
 * 使用两个栈实现一个队列
 */
public class TwoStackQueue<T> {

    private final Stack<T> pushStack = new Stack<>();

    private final Stack<T> popStack = new Stack<>();

    /**
     * 栈：先进后出。
     * 只要把压入 pushStack 中的元素 弹出来再压入 popStack 中
     * 两个栈的操作就变成了 先进先出
     *
     * @param t
     */
    public synchronized void enterQueue(T t) {

        pushStack.push(t);


    }


    public synchronized T get() {

        /**
         * 如果popStack不是空的，就不能往 pushStack 中放入任何数据
         */
        if (popStack.isEmpty()) {
            /**
             * 必须一次性将 pushStack 中的数据全部压入 popStack
             */
            while (!pushStack.isEmpty()) {

                popStack.push(pushStack.pop());
            }
        }


        return popStack.pop();
    }

    public synchronized boolean isEmpty() {

        return pushStack.isEmpty() && popStack.isEmpty();

    }
}
